package model.dominio.arbolHuffman;

/**
 * Clase que representa los nodos del arbol
 * @author Gustavo Canul, Noe Cob, Arandi López
 *
 */
public class NodoBinarioHuffman {

    public char caracter;
    public int frecuencia;
    public String codigoBinario;
    public NodoBinarioHuffman nodoDerecho, nodoIzquierdo;
    public NodoBinarioHuffman nodoHijoIzquierdo, nodoHijoDerecho;
    public boolean esHoja;

    /**
     * Constructor que inicializa los valores que tendra el nodo del arbol de Huffman
     *
     * @param caracter
     * @param frecuencia
     * @param esHoja
     */
    public NodoBinarioHuffman(char caracter, int frecuencia, boolean esHoja) {
        this.caracter = caracter;
        this.frecuencia = frecuencia;
        this.esHoja = esHoja;
        codigoBinario = "";
    }

    /**
     * Metodo que pone el valor al codigo de Huffman 
     *
     * @param codigoBinario 
     */
    public void setCodigo(String codigoBinario) {
        this.codigoBinario = codigoBinario;
    }

    /**
     * Metodo que devuelve el hijo izquierdo 
     *
     * @return un nodoHijoIzquierdo
     */
    public NodoBinarioHuffman getHijoIzquierdo() {
        return nodoHijoIzquierdo;
    }

    /**
     * Metodo que permite aladir el hijo izquierdo al nodo
     *
     * @param nodoHijoIzquierdo Es el Nodo a a�adir
     */
    public void setHijoIzquierdo(NodoBinarioHuffman hijoIzq) {
        this.nodoHijoIzquierdo = hijoIzq;
    }

    /**
     * Metodo que devuelve el hijo derecho 
     *
     * @return nodoHijoDerecho
     */
    public NodoBinarioHuffman getHijoDerecho() {
        return nodoHijoDerecho;
    }

    /**
     * Metodo que permite añadir el el hijo derecho al nodo
     *
     * @param nodoHijoDerecho 
     */
    public void setHijoDerecho(NodoBinarioHuffman hijoDer) {
        this.nodoHijoDerecho = hijoDer;
    }

    /**
     * Metodo que devuelve el hijo derecho del nodo
     *
     * @return un nodoDerecho
     */
    public NodoBinarioHuffman getNodoDerecho() {
        return nodoDerecho;
    }

    /**
     * Metodo que permite  añadir un nodo al nodoDerecho del nodo
     *
     * @param nodoDerecho 
     */
    public void setNodoDerecho(NodoBinarioHuffman derecha) {
        this.nodoDerecho = derecha;
    }

    /**
     * Metodo que devuelve el nodo nodoIzquierdo
     *
     * @return un nodoIquierdo
     */
    public NodoBinarioHuffman getNodoIzquierdo() {
        return nodoIzquierdo;
    }

    /**
     * Metodo que añade un nodo a la nodoIzquierdo
     *
     * @param nodoIzquierdo
     */
    public void setNodoIzquierdo(NodoBinarioHuffman izquierda) {
        this.nodoIzquierdo = izquierda;
    }

    /**
     * Metodo que devuelve la caracter que representa el Nodo
     *
     * @return una caracter
     */
    public char getCaracter() {
        return caracter;
    }

    /**
     * Metodo que asigna un nuevo caracter al Nodo
     *
     * @param caracter 
     */
    public void setCaracter(char letra) {
        this.caracter = letra;
    }

    /**
     * Metodo que obtiene la frecuencia del Nodo
     *
     * @return un entero
     */
    public int getFrecuencia() {
        return frecuencia;
    }

    /**
     * Metodo que permite asignar la frecuencia de un nodo
     *
     * @param frecuencia
     */
    public void setFrecuencia(int frecuencia) {
        this.frecuencia = frecuencia;
    }

    /**
     *  Metodo que devuelve el codigoBinario huffman del Nodo
     *
     * @return un string de codigoBinario
     */
    public String getCodigoBinario() {
        return codigoBinario;
    }

    /**
     * Metodo que devuelve el esHoja del nodo
     *
     * @return es Hoja
     */
    public boolean isHoja() {
        return esHoja;
    }

    /**
     * Metodo que asigna el esHoja a un nodo
     *
     * @param esHoja 
     */
    public void setEsHoja(boolean tipo) {
        this.esHoja = tipo;
    }
}
